Estoy trabajando en una aplicación angular con Django con rest-framework .
La aplicación recibe su información con json del servidor. Una de las claves es created_time ... El valor de este campo tiene el formato según iso-8601 , por ejemplo, 2015-05-29T19:06:16.693209Z .
En el cliente tengo un campo:
<input type="time" ng-model="created_time">Pero cuando llegan los datos me sale este error:
Error: [ngModel:datefmt] Expected `2015-05-29T19:06:16.693209Z` to be a date http://errors.angularjs.org/1.3.13/ngModel/datefmt?p0=2015-05-29T19%3A06%3A16.693209Z at REGEX_STRING_REGEXP (angular.js:63) at Array.<anonymous> (angular.js:19807) at Object.ngModelWatch (angular.js:23289) at Scope.$get.Scope.$digest (angular.js:14235) at Scope.$get.Scope.$apply (angular.js:14506) at done (angular.js:9659) at completeRequest (angular.js:9849) at XMLHttpRequest.requestLoaded (angular.js:9790)Ya probé todo :( el formato es exactamente como las instrucciones en los documentos de angular...
Esto debe estar sucediendo con angular 1.3+. 1.3+ en adelante ng-model para la entrada de fecha/hora debe ser un objeto de fecha válido, ya no se permite la representación de cadena de fecha. Debe convertir la cadena en objeto de fecha ( $scope.created_time = new Date(dateString) ) y vincularla al modelo ng. Si sigue el enlace de error , tiene una descripción clara sobre el error y cómo resolverlo.
Todas las entradas relacionadas con la fecha requieren que el modelo sea un objeto de fecha. Si el modelo es otra cosa, se lanzará este error. Angular no establece errores de validación en este caso, ya que esos errores se muestran al usuario, pero el estado erróneo fue causado por una lógica de aplicación incorrecta y no por el usuario.
Si obtiene sus datos de un Servicio REST, simplemente puede convertir sus campos a Fecha.
$http.get(url).success(function(data){ $scope.data = data; // get row data $scope.data.mydatefield = new Date($scope.data.mydatefield); // convert filed to date });Cree una directiva simple que convierta el valor del modelo:
HTML:
<input date-input type="time" ng-model="created_time">Directiva:
app.directive('dateInput', function(){ return { restrict : 'A', scope : { ngModel : '=' }, link: function (scope) { if (scope.ngModel) scope.ngModel = new Date(scope.ngModel); } } });